home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xmmix-1.1 / main.c < prev    next >
C/C++ Source or Header  |  1995-07-05  |  3KB  |  174 lines

  1. /*
  2.  *   xmmix - Motif(tm) Audio Mixer
  3.  *
  4.  *   Copyright (C) 1995  Ti Kan
  5.  *   E-mail: ti@amb.org
  6.  *
  7.  *   This program is free software; you can redistribute it and/or modify
  8.  *   it under the terms of the GNU General Public License as published by
  9.  *   the Free Software Foundation; either version 2 of the License, or
  10.  *   (at your option) any later version.
  11.  *
  12.  *   This program is distributed in the hope that it will be useful,
  13.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  *   GNU General Public License for more details.
  16.  *
  17.  *   You should have received a copy of the GNU General Public License
  18.  *   along with this program; if not, write to the Free Software
  19.  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  *
  21.  */
  22. #ifndef LINT
  23. static char *_main_c_ident_ = "@(#)main.c    2.4 95/05/12";
  24. #endif
  25.  
  26. #include "appenv.h"
  27. #include "resource.h"
  28. #include "widget.h"
  29. #include "mixer.h"
  30.  
  31.  
  32. /* Global data */
  33. bool_t            exit_flag;    /* Flag indicating end of application */
  34. appdata_t        app_data;    /* Options data */
  35. widgets_t        widgets;    /* Holder of all widgets */
  36. FILE            *errfp = stderr;/* Error message stream */
  37.  
  38.  
  39. /***********************
  40.  *  internal routines  *
  41.  ***********************/
  42.  
  43.  
  44. /*
  45.  * onsig
  46.  *    Signal handler.  Causes the application to shut down gracefully.
  47.  *
  48.  * Args:
  49.  *    sig - The signal number received.
  50.  *
  51.  * Return:
  52.  *    Nothing.
  53.  */
  54. STATIC void
  55. onsig(int sig)
  56. {
  57.     signal(sig, SIG_IGN);
  58.     exit_flag = TRUE;
  59. }
  60.  
  61.  
  62. /*
  63.  * usage
  64.  *    Display command line usage syntax
  65.  *
  66.  * Args:
  67.  *    argc, argv
  68.  *
  69.  * Return:
  70.  *    Nothing.
  71.  */
  72. STATIC void
  73. usage(int argc, char **argv)
  74. {
  75.     int    i;
  76.  
  77.     fprintf(errfp, "Unknown option:\n");
  78.     for (i = 1; i < argc; i++)
  79.         fprintf(errfp, "%s ", argv[i]);
  80.  
  81.     fprintf(errfp, "\n\nUsage: %s %s %s %s %s\n",
  82.         "[-dev device]",
  83.         "[-autoload path]",
  84.         "[-exitreset]",
  85.         "[-demo]",
  86.         "[-debug]",
  87.         argv[0]);
  88.  
  89.      fprintf(errfp,
  90.         "\nStandard Xt Intrinsics and Motif options are supported.\n");
  91. }
  92.  
  93.  
  94. /*
  95.  * main
  96.  *    The main function
  97.  */
  98. void
  99. main(int argc, char **argv)
  100. {
  101.     XtAppContext    app;
  102.     XEvent        ev;
  103.  
  104.     /* Initialize variables */
  105.     exit_flag = FALSE;
  106.  
  107.     /* Handle some signals */
  108.     signal(SIGINT, onsig);
  109.     signal(SIGHUP, onsig);
  110.     signal(SIGTERM, onsig);
  111.  
  112.     /* Initialize X toolkit */
  113.     widgets.toplevel = XtVaAppInitialize(
  114.         &app,
  115.         "XMmix",
  116.         options, XtNumber(options),
  117.         &argc, argv,
  118.         fallbacks,
  119.         XmNmappedWhenManaged, False,
  120.         NULL
  121.     );
  122.  
  123.     /* Get application options */
  124.     XtVaGetApplicationResources(
  125.         widgets.toplevel,
  126.         (XtPointer) &app_data,
  127.         resources,
  128.         XtNumber(resources),
  129.         NULL
  130.     );
  131.         
  132.     /* Check command line for unknown arguments */
  133.     if (argc > 1) {
  134.         usage(argc, argv);
  135.         exit(1);
  136.     }
  137.  
  138.     /* Sound driver specific initialization */
  139.     mx_init_drv();
  140.  
  141.     /* Initialize widget-related data */
  142.     widget_init(&widgets);
  143.  
  144.     /* Initialize mixer hardware */
  145.     mx_init_hw(&widgets);
  146.  
  147.     /* Create all widgets */
  148.     create_widgets(&widgets);
  149.  
  150.     /* Display widgets */
  151.     XtRealizeWidget(widgets.toplevel);
  152.  
  153.     /* Configure resources after realizing widgets */
  154.     post_realize_config(&widgets);
  155.  
  156.     /* Register callback routines */
  157.     register_callbacks(&widgets);
  158.  
  159.     /* Initialize screen controls */
  160.     mx_start(&widgets);
  161.  
  162.     /* Make the main window visible */
  163.     XtMapWidget(widgets.toplevel);
  164.  
  165.     /* Event processing loop */
  166.     while (!exit_flag) {
  167.         XtAppNextEvent(app, &ev);
  168.         XtDispatchEvent(&ev);
  169.     }
  170.  
  171.     exit(0);
  172. }
  173.  
  174.